package com.awg.studyplan.excel.exp2read.poi;

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * POI方式解析高版本的Excel文件（在实际开发过程中无法预知用户所安装的Office版本的高低，为了保持程序的兼容性，常常使用HSSF），
 * HSSF，兼容低版本的Office97 ～ 2007，以*.xls结尾；
 * XSSF，兼容高版本的Office，即Office2007以后的，以*.xlsx结尾
 * 
 * @author AWG
 * @date 2020-02-18
 * @version 1.0
 */
public class POIReadHighExcel {

    public static void main(String[] args) {
        /**
         * 定义需要解析的Excel文件(高本版的Excel文件, *.xlsx)
         */
        File file = new File(System.getProperty("user.home") + File.separatorChar + "Desktop" + File.separatorChar
                + "poi_exp_high_excel.xlsx");
        try {
            /**
             * 创建工作簿
             */
            XSSFWorkbook workbook = new XSSFWorkbook(FileUtils.openInputStream(file));
            /**
             * 获取工作表
             */
            XSSFSheet sheet = workbook.getSheetAt(0);
            // 定义工作表中的第一行
            int firstRowNum = 0;
            // 获取工作表中的最后一行, 即工作表共有多少行
            int lastRowNum = sheet.getLastRowNum();
            // 获取工作表的每一行
            for (int i = firstRowNum; i <= lastRowNum; i++) {
                // 读取每一行
                XSSFRow row = sheet.getRow(i);
                // 获取每一行的列数
                int colNum = row.getLastCellNum();
                // 循环读取每一行的所有的单元格的内容
                for (int j = 0; j < colNum; j++) {
                    // 获取每一个单元格
                    XSSFCell cell = row.getCell(j);
                    // 获取每一个单元格的内容
                    String cellValue = cell.getStringCellValue();
                    System.out.print(cellValue + "\t\t");
                }
                System.out.println();
            }
            // 关闭流
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
